package cevent.source.cloudcenter.server.service;

import cevent.source.cloudcenter.server.domain.Module;
import cevent.source.cloudcenter.server.domain.ModuleExample;
import cevent.source.cloudcenter.server.dto.*;
import cevent.source.cloudcenter.server.enums.*;
import cevent.source.cloudcenter.server.exception.BusinessException;
import cevent.source.cloudcenter.server.exception.BusinessExceptionCode;
import cevent.source.cloudcenter.server.mapper.ModuleMapper;
import cevent.source.cloudcenter.server.mapper.commonMapper.CommonModuleMapper;
import cevent.source.cloudcenter.server.util.DuplicateUtil;
import cevent.source.cloudcenter.server.util.UUID8Util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;

/**
 * @author cevent
 * @description 模块表服务层
 */
@Service
public class ModuleService {

    private static final Logger LOG = LoggerFactory.getLogger(ModuleService.class);

    @Resource
    private ModuleMapper moduleMapper;
    //module封装向外暴露的CommonModuleMapper
    @Resource
    private CommonModuleMapper commonModuleMapper;
    //注入分类模块关联service
    @Resource
    private CategoryModuleService categoryModuleService;
    //调用category，更新category表的moduleId
    @Resource
    private CategoryService categoryService;

    //1.无分页列表查询：dto获取domain参数
    public List<ModuleDto> moduleDtoList() {
        ModuleExample moduleExample = new ModuleExample();
        moduleExample.setOrderByClause("sort asc");
        List<Module> moduleList = moduleMapper.selectByExample(moduleExample);
        List<ModuleDto> moduleDtoList = new ArrayList<ModuleDto>();
        for (int i = 0; i < moduleList.size(); i++) {
            Module module = moduleList.get(i);
            ModuleDto moduleDto = new ModuleDto();
            //复制拷贝(source,target)
            BeanUtils.copyProperties(module, moduleDto);
            moduleDtoList.add(moduleDto);
        }
        return moduleDtoList;
    }

    /*2.分页查询：pageDto保存数据
        list数据集合：listPageData
        当前页码：currentPage
        每页行数：size
        总计函数：totalSize
        前端可返回pageDto，无需返回值
     */
    public void getModulePageDtoList(ModulePageDto modulePageDto) {
        //1.分页设置（前端传入当前页和每页行数params），起始页，每页行数size
        PageHelper.startPage(modulePageDto.getCurrentPage(), modulePageDto.getSize());

        ModuleExample moduleExample = new ModuleExample();
        ModuleExample.Criteria criteria = moduleExample.createCriteria();
        //判断是否带有parentId
        if (!StringUtils.isEmpty(modulePageDto.getParentId())) {
            criteria.andParentIdEqualTo(modulePageDto.getParentId());
        }
        moduleExample.setOrderByClause("sort asc");
        List<Module> moduleList = moduleMapper.selectByExampleWithBLOBs(moduleExample);
        //2.将mapper查询结果复制到pageInfo
        PageInfo<Module> pageInfo = new PageInfo<>(moduleList);
        LOG.info("分页数据：");
        //3.pageInfo计算处理处理=>后分页的总行数set到pageDto做记录
        modulePageDto.setTotalSize(pageInfo.getTotal());

        List<ModuleDto> moduleDtoList = new ArrayList<>();
        for (int i = 0; i < moduleList.size(); i++) {
            Module module = moduleList.get(i);
            //注意后端参数格式，我们获取到的seoKey必须是可转换的json字符串
            LOG.info("获取到的seoKeyword：{}", module.getSeoKeyword());
            List<String> seoKeyword = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getSeoKeyword())) {
                seoKeyword = Arrays.asList(module.getSeoKeyword().split(";"));
            }
            List<String> pic = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getPicList())) {
                pic = Arrays.asList(module.getPicList().split(";"));
            }

            //这里如果报not pointer异常，需要清空数据库，默认default null，数据不对称
            List<String> mini = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getMiniPicList())) {
                mini = Arrays.asList(module.getMiniPicList().split(";"));
            }
            List<String> icon = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getIconList())) {
                icon = Arrays.asList(module.getIconList().split(";"));
            }

            List<ModuleCoreDescDto> coreDescDtoList = new ArrayList<>();
            List<String> cores = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getCoreDesc())) {
                StringBuilder sb = new StringBuilder();
                cores = Arrays.asList(module.getCoreDesc().split(";"));
                for (String coreDesc : cores) {
                    //字符串转jsonObj
                    JSONObject jsonObject = JSON.parseObject(coreDesc);
                    ModuleCoreDescDto coreDescDto = JSONObject.toJavaObject(jsonObject, ModuleCoreDescDto.class);
                    coreDescDtoList.add(coreDescDto);
                }

            }

            ModuleDto moduleDto = DuplicateUtil.copy(module, ModuleDto.class);
            moduleDto.setSeoKeyword(seoKeyword);
            moduleDto.setPicList(pic);
            moduleDto.setMiniPicList(mini);
            moduleDto.setIconList(icon);
            moduleDto.setCoreDescDtos(coreDescDtoList);
            moduleDtoList.add(moduleDto);
        }
        modulePageDto.setListPageData(moduleDtoList);
    }

    //3.新增、修改module，将传入的id转为module对象本身
    public void save(ModuleDto moduleDto) {
        Module module = DuplicateUtil.copy(moduleDto, Module.class);
        if (StringUtils.isEmpty(moduleDto.getUniId())) {
            this.insert(module);
        } else {
            this.update(module);
        }
        updateMduleTime(moduleDto.getParentId());
    }

    //**模块分类关联保存，关联表保存+事务管理
    @Transactional
    public void saveMC(ModuleRelationCategoryDto moduleRelationCategoryDto) {

        /*seoKey转换*/
        List<String> seoKey = moduleRelationCategoryDto.getSeoKeyword();
        //stringBuilder转换list
        StringBuilder sb = new StringBuilder();
        for (String item : seoKey) {
            sb.append(item + ";");
        }
        //将sb转为string
        String seoKeyword = sb.toString();
        LOG.info("获取到的module-picLIst：{}", moduleRelationCategoryDto.getPicList());
        //转换picList
        List<String> picList = moduleRelationCategoryDto.getPicList();
        List<String> miniList = moduleRelationCategoryDto.getMiniPicList();
        List<String> iconList = moduleRelationCategoryDto.getIconList();
        /*接收前端传入的list => coreDescDto*/
        List<ModuleCoreDescDto> moduleCoreDescDtoList = moduleRelationCategoryDto.getCoreDescDtos();

        LOG.info("获取到的picLIst：{}", picList);
        StringBuilder pics = new StringBuilder();
        for (String item : picList) {
            pics.append(item + ";");
            LOG.info("append入的pics：{}", pics);
        }
        String pic = pics.toString();

        StringBuilder minis = new StringBuilder();
        if (!StringUtils.isEmpty(miniList)) {
            for (String mini : miniList) {
                minis.append(mini + ";");
            }
        }

        String mini = minis.toString();

        StringBuilder icons = new StringBuilder();
        if (!StringUtils.isEmpty(iconList)) {
            for (String icon : iconList) {
                icons.append(icon + ";");
            }
        }

        String icon = icons.toString();

        //核心模块Dto
        StringBuilder coreDesc = new StringBuilder();
        /*if(!StringUtils.isEmpty(getCoreDescList(moduleRelationCategoryDto.getUniId()))){
            coreDesc=getCoreDescList(moduleRelationCategoryDto.getUniId());
        }*/

        if (moduleRelationCategoryDto.getCoreDescDtos() != null) {
            for (ModuleCoreDescDto coreDescDto : moduleRelationCategoryDto.getCoreDescDtos()) {
                //转jsonObj
                JSONObject jsonObject = (JSONObject) JSONObject.toJSON(coreDescDto);
                //转jsonStr
                String coreDescStr = jsonObject.toJSONString();
                LOG.info("添加进入的jsonStr：{}", coreDescStr);
                coreDesc.append(coreDescStr + ";");
            }
        }
        LOG.info("添加后的strList：{}", coreDesc);

        String cores = coreDesc.toString();

        //将转换后的module属性存入
        Module module = DuplicateUtil.copy(moduleRelationCategoryDto, Module.class);
        module.setSeoKeyword(seoKeyword);
        module.setPicList(pic);
        module.setMiniPicList(mini);
        module.setIconList(icon);
        module.setCoreDesc(cores);
        if (StringUtils.isEmpty(moduleRelationCategoryDto.getUniId())) {
            this.insert(module);
        } else {
            this.update(module);
        }
        //批量更新分类管理表,这里的uniId=module的uniId，这里使用module的id，否则新增时报错
        if (!StringUtils.isEmpty(moduleRelationCategoryDto.getCategoryChildrenDtoList())) {
            categoryModuleService.saveBath(module.getUniId(), moduleRelationCategoryDto.getCategoryChildrenDtoList());
            //批量保存给category，传入moduleId和children
            String moduleId = module.getUniId();
            List<CategoryChildrenDto> categoryChildrenDtoList = moduleRelationCategoryDto.getCategoryChildrenDtoList();
            categoryService.saveModuleId(moduleId, categoryChildrenDtoList);
        }

    }

    private StringBuilder getCoreDescList(String moduleId) {
        //字符串的;伪数组
        Module module = moduleMapper.selectByPrimaryKey(moduleId);
        //数组str
        StringBuilder coreDescBuilder = new StringBuilder(module.getCoreDesc());
        LOG.info("获取到的str-> strBuilder : {}", coreDescBuilder);
        return coreDescBuilder;
    }

    //通过moduleId保存picList
    public List<String> savePicList(ModulePicPathDto modulePicPathDto) {
        Module module = moduleMapper.selectByPrimaryKey(modulePicPathDto.getModuleId());
        List<String> picList = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        if (!StringUtils.isEmpty(module.getPicList())) {
            picList = Arrays.asList(module.getPicList().split(";"));
            //list数组转字符串
            for (String pic : picList) {
                sb.append(pic + ";");
            }
        }

        sb.append(modulePicPathDto.getPicPath() + ";");
        String pics = sb.toString();
        module.setPicList(pics);
        moduleMapper.updateByPrimaryKeyWithBLOBs(module);
        //更新完毕进行查询pics，并返回前端list集合
        List<String> pic = getPicList(modulePicPathDto.getModuleId());
        return pic;
    }

    private List<String> getPicList(String moduleId) {
        Module module = moduleMapper.selectByPrimaryKey(moduleId);
        List<String> picList = Arrays.asList(module.getPicList().split(";"));
        return picList;
    }

    //保存手机端图片
    public List<String> saveMiniPicList(ModulePicPathDto modulePicPathDto) {
        Module module = moduleMapper.selectByPrimaryKey(modulePicPathDto.getModuleId());
        List<String> miniList = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        if (!StringUtils.isEmpty(module.getMiniPicList())) {
            miniList = Arrays.asList(module.getMiniPicList().split(";"));
            for (String mini : miniList) {
                sb.append(mini + ";");
            }
        }
        sb.append(modulePicPathDto.getPicPath() + ";");
        String minis = sb.toString();
        module.setMiniPicList(minis);
        moduleMapper.updateByPrimaryKeyWithBLOBs(module);
        List<String> miniPicList = getMiniPicList(modulePicPathDto.getModuleId());
        return miniPicList;
    }

    private List<String> getMiniPicList(String moduleId) {
        Module module = moduleMapper.selectByPrimaryKey(moduleId);
        List<String> miniPicList = Arrays.asList(module.getMiniPicList().split(";"));
        return miniPicList;
    }

    //保存iconList
    public List<String> saveIconList(ModulePicPathDto modulePicPathDto) {
        Module module = moduleMapper.selectByPrimaryKey(modulePicPathDto.getModuleId());
        List<String> iconList = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        if (!StringUtils.isEmpty(module.getIconList())) {
            iconList = Arrays.asList(module.getIconList().split(";"));
            for (String icon : iconList) {
                sb.append(icon + ";");
            }
        }
        sb.append(modulePicPathDto.getPicPath() + ";");
        String icons = sb.toString();
        module.setIconList(icons);
        moduleMapper.updateByPrimaryKeyWithBLOBs(module);
        List<String> icon = getIconList(modulePicPathDto.getModuleId());
        return icon;
    }

    private List<String> getIconList(String moduleId) {
        Module module = moduleMapper.selectByPrimaryKey(moduleId);
        List<String> iconList = Arrays.asList(module.getIconList().split(";"));
        return iconList;
    }

    //**通过path传入moduleUniId获取模块分类dto
    public List<CategoryModuleDto> getModuleCategory(String moduleUniId) {
        List<CategoryModuleDto> categoryModuleDtoList = categoryModuleService.getCategoryModuleDtoList(moduleUniId);
        return categoryModuleDtoList;
    }

    //4.删除模块
    public void delete(String uniId) {
        ModuleExample moduleExample = new ModuleExample();
        moduleMapper.deleteByPrimaryKey(uniId);
    }

    //5.向外暴露dto，不暴露实体类：插入数据
    private void insert(Module module) {
        module.setUniId(UUID8Util.getShortUUID());
        if (module.getParentId() == null) {
            module.setParentId("00000000");
        }
        if (module.getTypeId() == null) {
            module.setTypeId(ModuleTypeEnum.BASE_MODULE.getCode());
        }

        try {
            Date now = new Date();
            String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now);
            long time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date).getTime();
            int timeInt = (int) (time / 1000);
            module.setCreateTime(now);
            module.setUpdateTime(now);
            module.setiCreateTime(timeInt);
            module.setiUpdateTime(timeInt);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        moduleMapper.insert(module);
    }

    //6.更新模块
    private void update(Module module) {
        LOG.info("==》更新的module：{}", module);
        try {
            Date now = new Date();
            String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now);
            long time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date).getTime();
            int timeInt = (int) (time / 1000);
            module.setUpdateTime(now);
            module.setiUpdateTime(timeInt);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //基于moduleContent为media,这里需要widthBlobs
        moduleMapper.updateByPrimaryKeyWithBLOBs(module);
    }

    //7.更新module总时长
    public void updateModuleVideoTime(String moduleId, String uniId) {
        LOG.info("更新模块总时长moduleId为moduleSub的uniId：{}，uniId为moduleSub的parentId: {}", moduleId, uniId);
        commonModuleMapper.updateModuleVideoTime(moduleId, uniId);
    }

    //8.更新moduleSub时长
    public void updateModuleSubVideoTime(String moduleId) {
        LOG.info("更新模块Sub时长moduleId为moduleSub的uniId：{}", moduleId);
        commonModuleMapper.updateModuleSubVideoTime(moduleId);
    }

    //9.**更新module总时长，优化，计算sub的时长
    public void updateMduleTime(String parentId) {
        LOG.info("更新--------parentId：{}", parentId);
        commonModuleMapper.updateModuleTime(parentId);
    }

    //10.排序方法
    @Transactional
    public void sort(SortDto sortDto) {
        if (sortDto.getNewSort() < 0) {
            throw new BusinessException(BusinessExceptionCode.MODULE_SORT_ERROR);
        }
        if (sortDto.getCurrentSort() < 0) {
            sortDto.setCurrentSort(0);
        }
        //修改当前记录的排序值
        commonModuleMapper.updateSort(sortDto);
        //排序值变大，排序区间new-old值-1
        if (sortDto.getNewSort() > sortDto.getCurrentSort()) {
            commonModuleMapper.moveSortForward(sortDto);
        }
        //排序值变小，排序区间值+1
        if (sortDto.getNewSort() < sortDto.getCurrentSort()) {
            commonModuleMapper.moveSortBackward(sortDto);
        }
    }

    //11.获取baseModule首页信息显示
    public List<ModuleDto> getBaseModule() {
        ModuleExample moduleExample = new ModuleExample();
        ModuleExample.Criteria criteria = moduleExample.createCriteria();
        criteria.andTypeIdEqualTo(ModuleTypeEnum.BASE_MODULE.getCode());
        List<Module> moduleList = moduleMapper.selectByExampleWithBLOBs(moduleExample);
        List<ModuleDto> moduleDtoList = new ArrayList<>();
        for (Module module : moduleList) {
            List<String> seoKeyword = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getSeoKeyword())) {
                seoKeyword = Arrays.asList(module.getSeoKeyword().split(";"));
            }
            List<String> pic = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getPicList())) {
                pic = Arrays.asList(module.getPicList().split(";"));
            }

            //这里如果报not pointer异常，需要清空数据库，默认default null，数据不对称
            List<String> mini = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getMiniPicList())) {
                mini = Arrays.asList(module.getMiniPicList().split(";"));
            }
            List<String> icon = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getIconList())) {
                icon = Arrays.asList(module.getIconList().split(";"));
            }

            List<ModuleCoreDescDto> coreDescDtoList = new ArrayList<>();
            List<String> cores = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getCoreDesc())) {
                StringBuilder sb = new StringBuilder();
                cores = Arrays.asList(module.getCoreDesc().split(";"));
                for (String coreDesc : cores) {
                    //字符串转jsonObj
                    JSONObject jsonObject = JSON.parseObject(coreDesc);
                    ModuleCoreDescDto coreDescDto = JSONObject.toJavaObject(jsonObject, ModuleCoreDescDto.class);
                    coreDescDtoList.add(coreDescDto);
                }

            }

            ModuleDto moduleDto = DuplicateUtil.copy(module, ModuleDto.class);
            moduleDto.setSeoKeyword(seoKeyword);
            moduleDto.setPicList(pic);
            moduleDto.setMiniPicList(mini);
            moduleDto.setIconList(icon);
            moduleDto.setCoreDescDtos(coreDescDtoList);
            moduleDtoList.add(moduleDto);
        }

        return moduleDtoList;
    }

    /**
     * 素材中心
     */
    //1.轮播素材
    public List<ModuleDto> getCarouselMaterial() {
        ModuleExample moduleExample = new ModuleExample();
        ModuleExample.Criteria criteria = moduleExample.createCriteria();
        criteria.andTypeIdEqualTo(ModuleTypeEnum.MATERIALS_CENTER.getCode());
        criteria.andMaterialTypeEqualTo(MaterialTypeEnum.VIDEO_TYPE.getCode());
        criteria.andIsShowEqualTo(YesOrNoEnum.YES.getCode());
        criteria.andMaterialRecommendEqualTo(MaterialRecommendEnum.CAROUSEL_SHOW.getCode());
        moduleExample.setOrderByClause("sort desc");
        List<Module> moduleList = moduleMapper.selectByExampleWithBLOBs(moduleExample);
        List<ModuleDto> moduleDtoList = new ArrayList<>();
        for (Module module : moduleList) {
            List<String> seoKeyword = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getSeoKeyword())) {
                seoKeyword = Arrays.asList(module.getSeoKeyword().split(";"));
            }
            List<String> pic = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getPicList())) {
                pic = Arrays.asList(module.getPicList().split(";"));
            }

            //这里如果报not pointer异常，需要清空数据库，默认default null，数据不对称
            List<String> mini = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getMiniPicList())) {
                mini = Arrays.asList(module.getMiniPicList().split(";"));
            }
            List<String> icon = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getIconList())) {
                icon = Arrays.asList(module.getIconList().split(";"));
            }

            List<ModuleCoreDescDto> coreDescDtoList = new ArrayList<>();
            List<String> cores = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getCoreDesc())) {
                StringBuilder sb = new StringBuilder();
                cores = Arrays.asList(module.getCoreDesc().split(";"));
                for (String coreDesc : cores) {
                    //字符串转jsonObj
                    JSONObject jsonObject = JSON.parseObject(coreDesc);
                    ModuleCoreDescDto coreDescDto = JSONObject.toJavaObject(jsonObject, ModuleCoreDescDto.class);
                    coreDescDtoList.add(coreDescDto);
                }

            }

            ModuleDto moduleDto = DuplicateUtil.copy(module, ModuleDto.class);
            moduleDto.setSeoKeyword(seoKeyword);
            moduleDto.setPicList(pic);
            moduleDto.setMiniPicList(mini);
            moduleDto.setIconList(icon);
            moduleDto.setCoreDescDtos(coreDescDtoList);
            moduleDtoList.add(moduleDto);
        }

        return moduleDtoList;
    }

    //2.根据materialType获取素材list
    public List<ModuleDto> getMaterialVideoByType(String videoType) {
        ModuleExample moduleExample = new ModuleExample();
        ModuleExample.Criteria criteria = moduleExample.createCriteria();
        criteria.andVideoTypeEqualTo(videoType);
        criteria.andMaterialTypeEqualTo(MaterialTypeEnum.VIDEO_TYPE.getCode());
        criteria.andIsShowEqualTo(YesOrNoEnum.YES.getCode());
        moduleExample.setOrderByClause("sort desc");
        List<Module> moduleList = moduleMapper.selectByExampleWithBLOBs(moduleExample);
        List<ModuleDto> moduleDtoList = new ArrayList<>();
        moduleList.stream().forEach(module -> {
            List<String> seoKeyword = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getSeoKeyword())) {
                seoKeyword = Arrays.asList(module.getSeoKeyword().split(";"));
            }
            List<String> pic = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getPicList())) {
                pic = Arrays.asList(module.getPicList().split(";"));
            }

            //这里如果报not pointer异常，需要清空数据库，默认default null，数据不对称
            List<String> mini = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getMiniPicList())) {
                mini = Arrays.asList(module.getMiniPicList().split(";"));
            }
            List<String> icon = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getIconList())) {
                icon = Arrays.asList(module.getIconList().split(";"));
            }

            List<ModuleCoreDescDto> coreDescDtoList = new ArrayList<>();
            List<String> cores = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getCoreDesc())) {
                StringBuilder sb = new StringBuilder();
                cores = Arrays.asList(module.getCoreDesc().split(";"));
                for (String coreDesc : cores) {
                    //字符串转jsonObj
                    JSONObject jsonObject = JSON.parseObject(coreDesc);
                    ModuleCoreDescDto coreDescDto = JSONObject.toJavaObject(jsonObject, ModuleCoreDescDto.class);
                    coreDescDtoList.add(coreDescDto);
                }

            }

            ModuleDto moduleDto = DuplicateUtil.copy(module, ModuleDto.class);
            moduleDto.setSeoKeyword(seoKeyword);
            moduleDto.setPicList(pic);
            moduleDto.setMiniPicList(mini);
            moduleDto.setIconList(icon);
            moduleDto.setCoreDescDtos(coreDescDtoList);
            moduleDtoList.add(moduleDto);
        });

        return moduleDtoList;
    }

    //3.根据planeType获取平面列表
    public List<ModuleDto> getMaterialPlaneByType(String planeType) {
        ModuleExample moduleExample = new ModuleExample();
        ModuleExample.Criteria criteria = moduleExample.createCriteria();
        criteria.andIsShowEqualTo(YesOrNoEnum.YES.getCode());
        criteria.andMaterialTypeEqualTo(MaterialTypeEnum.PLANE_MATERIAL.getCode());
        criteria.andPlaneTypeEqualTo(planeType);
        moduleExample.setOrderByClause("sort desc");
        List<Module> moduleList = moduleMapper.selectByExampleWithBLOBs(moduleExample);
        List<ModuleDto> moduleDtoList = new ArrayList<>();
        moduleList.stream().forEach(module -> {
            List<String> seoKeyword = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getSeoKeyword())) {
                seoKeyword = Arrays.asList(module.getSeoKeyword().split(";"));
            }
            List<String> pic = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getPicList())) {
                pic = Arrays.asList(module.getPicList().split(";"));
            }

            //这里如果报not pointer异常，需要清空数据库，默认default null，数据不对称
            List<String> mini = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getMiniPicList())) {
                mini = Arrays.asList(module.getMiniPicList().split(";"));
            }
            List<String> icon = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getIconList())) {
                icon = Arrays.asList(module.getIconList().split(";"));
            }

            List<ModuleCoreDescDto> coreDescDtoList = new ArrayList<>();
            List<String> cores = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getCoreDesc())) {
                StringBuilder sb = new StringBuilder();
                cores = Arrays.asList(module.getCoreDesc().split(";"));
                for (String coreDesc : cores) {
                    //字符串转jsonObj
                    JSONObject jsonObject = JSON.parseObject(coreDesc);
                    ModuleCoreDescDto coreDescDto = JSONObject.toJavaObject(jsonObject, ModuleCoreDescDto.class);
                    coreDescDtoList.add(coreDescDto);
                }

            }

            ModuleDto moduleDto = DuplicateUtil.copy(module, ModuleDto.class);
            moduleDto.setSeoKeyword(seoKeyword);
            moduleDto.setPicList(pic);
            moduleDto.setMiniPicList(mini);
            moduleDto.setIconList(icon);
            moduleDto.setCoreDescDtos(coreDescDtoList);
            moduleDtoList.add(moduleDto);
        });

        return moduleDtoList;
    }

    //4.根据eventType获取大事记列表
    public List<ModuleDto> getMaterialEventBytType(String eventType, String eventDate) {
        ModuleExample moduleExample = new ModuleExample();
        ModuleExample.Criteria criteria = moduleExample.createCriteria();
        criteria.andIsShowEqualTo(YesOrNoEnum.YES.getCode());
        criteria.andMaterialTypeEqualTo(MaterialTypeEnum.COM_EVENT.getCode());
        criteria.andEventTypeEqualTo(eventType);
        criteria.andEventDateEqualTo(eventDate);
        moduleExample.setOrderByClause("sort desc");
        List<Module> moduleList = moduleMapper.selectByExampleWithBLOBs(moduleExample);
        List<ModuleDto> moduleDtoList = new ArrayList<>();
        moduleList.stream().forEach(module -> {
            List<String> seoKeyword = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getSeoKeyword())) {
                seoKeyword = Arrays.asList(module.getSeoKeyword().split(";"));
            }
            List<String> pic = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getPicList())) {
                pic = Arrays.asList(module.getPicList().split(";"));
            }

            //这里如果报not pointer异常，需要清空数据库，默认default null，数据不对称
            List<String> mini = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getMiniPicList())) {
                mini = Arrays.asList(module.getMiniPicList().split(";"));
            }
            List<String> icon = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getIconList())) {
                icon = Arrays.asList(module.getIconList().split(";"));
            }

            List<ModuleCoreDescDto> coreDescDtoList = new ArrayList<>();
            List<String> cores = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getCoreDesc())) {
                StringBuilder sb = new StringBuilder();
                cores = Arrays.asList(module.getCoreDesc().split(";"));
                for (String coreDesc : cores) {
                    //字符串转jsonObj
                    JSONObject jsonObject = JSON.parseObject(coreDesc);
                    ModuleCoreDescDto coreDescDto = JSONObject.toJavaObject(jsonObject, ModuleCoreDescDto.class);
                    coreDescDtoList.add(coreDescDto);
                }

            }

            ModuleDto moduleDto = DuplicateUtil.copy(module, ModuleDto.class);
            moduleDto.setSeoKeyword(seoKeyword);
            moduleDto.setPicList(pic);
            moduleDto.setMiniPicList(mini);
            moduleDto.setIconList(icon);
            moduleDto.setCoreDescDtos(coreDescDtoList);
            moduleDtoList.add(moduleDto);
        });

        return moduleDtoList;
    }

    public Map<String, List<ModuleEventDateDto>> getMaterialEventDate() {
        //需要更新一个dateDto，存放不同枚举type的日期
        List<ModuleEventDateDto> eventDate1 = getEventDate(MaterialEventType.EVENT_2019.getCode());
        List<ModuleEventDateDto> eventDate2 = getEventDate(MaterialEventType.EVENT_2020.getCode());
        LOG.info("e20：{}", eventDate2);
        List<ModuleEventDateDto> eventDate3 = getEventDate(MaterialEventType.EVENT_2021.getCode());
        LOG.info("e21：{}", eventDate3);
        //存放多个数组，使用HashMap
        Map<String, List<ModuleEventDateDto>> map = new HashMap<>();
        map.put(MaterialEventType.EVENT_2019.getCode(), eventDate1);
        map.put(MaterialEventType.EVENT_2020.getCode(), eventDate2);
        map.put(MaterialEventType.EVENT_2021.getCode(), eventDate3);
        //map排序:Map.entry<>
        Map<String, List<ModuleEventDateDto>> mapSort = map.entrySet()
                .stream().sorted(Map.Entry.comparingByKey())
                .collect(Collectors.toMap(
                        Map.Entry::getKey,
                        Map.Entry::getValue,
                        (m1, m2) -> m1,
                        LinkedHashMap::new
                ));
        return mapSort;
    }

    private List<ModuleEventDateDto> getEventDate(String eventType) {
        ModuleExample moduleExample = new ModuleExample();
        ModuleExample.Criteria criteria = moduleExample.createCriteria();
        criteria.andIsShowEqualTo(YesOrNoEnum.YES.getCode());
        criteria.andMaterialTypeEqualTo(MaterialTypeEnum.COM_EVENT.getCode());
        criteria.andEventTypeEqualTo(eventType);
        moduleExample.setOrderByClause("event_date asc");
        List<Module> moduleList = moduleMapper.selectByExampleWithBLOBs(moduleExample);
        List<ModuleEventDateDto> moduleEventDateDtoList = new ArrayList<>();
        moduleList.stream().forEach(module -> {
            String eventDate = module.getEventDate();
            String[] event = eventDate.split("-");
            ModuleEventDateDto moduleEventDateDto = new ModuleEventDateDto();
            moduleEventDateDto.setMonth(event[1]);
            String d = event[1] + "-" + event[2];
            List<String> date = new ArrayList<>();
            date.add(d);
            moduleEventDateDto.setDate(date);
            moduleEventDateDtoList.add(moduleEventDateDto);

        });
        LOG.info("第一次转换的 moduleEventDateDtoList：{}", moduleEventDateDtoList);
        List<ModuleEventDateDto> moduleEventDateDtos = new ArrayList<>();
        for (int i = 0; i < moduleEventDateDtoList.size(); i++) {
            ModuleEventDateDto moduleEventDate = new ModuleEventDateDto();
            moduleEventDate.setMonth(moduleEventDateDtoList.get(i).getMonth());
            //创建日期存放str数组
            List<String> dates = new ArrayList<>();
            //获取日期str数组
            List<String> dateOrigine = moduleEventDateDtoList.get(i).getDate();
            //StringBuffer转字符串
            StringBuffer sb = new StringBuffer();
            for (String s : dateOrigine) {
                sb.append(s);
            }
            //放入dates
            dates.add(sb.toString());
            LOG.info("e20走进来的：{}", moduleEventDate);
            for (int j = moduleEventDateDtoList.size() - 1; j > i; j--) {
                if (moduleEventDateDtoList.get(j).getMonth().equals(moduleEventDateDtoList.get(i).getMonth())) {
                    List<String> dateJ = moduleEventDateDtoList.get(j).getDate();
                    StringBuffer sbj = new StringBuffer();
                    for (String s : dateJ) {
                        sbj.append(s);
                    }
                    dates.add(sbj.toString());
                    //删除j重复的对象
                    moduleEventDateDtoList.remove(j);
                }
            }
            moduleEventDate.setDate(dates);
            LOG.info("e21走进来的：{}", moduleEventDate);
            moduleEventDateDtos.add(moduleEventDate);
        }
        return moduleEventDateDtos;
    }


    //最新素材列表
    public List<ModuleDto> getNewMaterial(String videoType) {
        ModuleExample moduleExample = new ModuleExample();
        ModuleExample.Criteria criteria = moduleExample.createCriteria();
        criteria.andIsShowEqualTo(YesOrNoEnum.YES.getCode());
        criteria.andMaterialTypeEqualTo(MaterialTypeEnum.VIDEO_TYPE.getCode());
        criteria.andVideoTypeEqualTo(videoType);
        criteria.andMaterialRecommendEqualTo(MaterialRecommendEnum.NEW_MATERIAL.getCode());
        moduleExample.setOrderByClause("sort desc");
        List<Module> moduleList = moduleMapper.selectByExampleWithBLOBs(moduleExample);
        List<ModuleDto> moduleDtoList = new ArrayList<>();
        moduleList.stream().forEach(module -> {
            List<String> seoKeyword = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getSeoKeyword())) {
                seoKeyword = Arrays.asList(module.getSeoKeyword().split(";"));
            }
            List<String> pic = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getPicList())) {
                pic = Arrays.asList(module.getPicList().split(";"));
            }

            //这里如果报not pointer异常，需要清空数据库，默认default null，数据不对称
            List<String> mini = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getMiniPicList())) {
                mini = Arrays.asList(module.getMiniPicList().split(";"));
            }
            List<String> icon = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getIconList())) {
                icon = Arrays.asList(module.getIconList().split(";"));
            }

            List<ModuleCoreDescDto> coreDescDtoList = new ArrayList<>();
            List<String> cores = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getCoreDesc())) {
                StringBuilder sb = new StringBuilder();
                cores = Arrays.asList(module.getCoreDesc().split(";"));
                for (String coreDesc : cores) {
                    //字符串转jsonObj
                    JSONObject jsonObject = JSON.parseObject(coreDesc);
                    ModuleCoreDescDto coreDescDto = JSONObject.toJavaObject(jsonObject, ModuleCoreDescDto.class);
                    coreDescDtoList.add(coreDescDto);
                }

            }

            ModuleDto moduleDto = DuplicateUtil.copy(module, ModuleDto.class);
            moduleDto.setSeoKeyword(seoKeyword);
            moduleDto.setPicList(pic);
            moduleDto.setMiniPicList(mini);
            moduleDto.setIconList(icon);
            moduleDto.setCoreDescDtos(coreDescDtoList);
            moduleDtoList.add(moduleDto);
        });

        return moduleDtoList;
    }

    //热门素材列表
    public List<ModuleDto> getHotMaterial() {
        ModuleExample moduleExample = new ModuleExample();
        ModuleExample.Criteria criteria = moduleExample.createCriteria();
        criteria.andIsShowEqualTo(YesOrNoEnum.YES.getCode());
        criteria.andMaterialTypeEqualTo(MaterialTypeEnum.VIDEO_TYPE.getCode());
        criteria.andMaterialRecommendEqualTo(MaterialRecommendEnum.HOT_VIDEO.getCode());
        moduleExample.setOrderByClause("sort desc");
        List<Module> moduleList = moduleMapper.selectByExampleWithBLOBs(moduleExample);
        List<ModuleDto> moduleDtoList = new ArrayList<>();
        moduleList.stream().forEach(module -> {
            List<String> seoKeyword = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getSeoKeyword())) {
                seoKeyword = Arrays.asList(module.getSeoKeyword().split(";"));
            }
            List<String> pic = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getPicList())) {
                pic = Arrays.asList(module.getPicList().split(";"));
            }

            //这里如果报not pointer异常，需要清空数据库，默认default null，数据不对称
            List<String> mini = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getMiniPicList())) {
                mini = Arrays.asList(module.getMiniPicList().split(";"));
            }
            List<String> icon = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getIconList())) {
                icon = Arrays.asList(module.getIconList().split(";"));
            }

            List<ModuleCoreDescDto> coreDescDtoList = new ArrayList<>();
            List<String> cores = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getCoreDesc())) {
                StringBuilder sb = new StringBuilder();
                cores = Arrays.asList(module.getCoreDesc().split(";"));
                for (String coreDesc : cores) {
                    //字符串转jsonObj
                    JSONObject jsonObject = JSON.parseObject(coreDesc);
                    ModuleCoreDescDto coreDescDto = JSONObject.toJavaObject(jsonObject, ModuleCoreDescDto.class);
                    coreDescDtoList.add(coreDescDto);
                }

            }

            ModuleDto moduleDto = DuplicateUtil.copy(module, ModuleDto.class);
            moduleDto.setSeoKeyword(seoKeyword);
            moduleDto.setPicList(pic);
            moduleDto.setMiniPicList(mini);
            moduleDto.setIconList(icon);
            moduleDto.setCoreDescDtos(coreDescDtoList);
            moduleDtoList.add(moduleDto);
        });

        return moduleDtoList;
    }

    /**
     * 素材下载
     * .au = audio/basic
     * .avi = video/avi  .mp4 = video/mpeg4
     * .eps = application/x-ps  .eps = application/postscript
     * .exe = application/x-msdownload
     * .doc = application/msword
     * .pdf = application/pdf :客户端浏览器按PDF格式进行解析文档
     * .ppt = application/vnd.ms-powerpoint  .ppt = application/x-ppt
     * .xls = application/vnd.ms-excel  .xls = application/x-xls
     * .jfif = image/jpeg
     * .jpe = image/jpeg  .jpe = application/x-jpe  .jpg = application/x-jpg .jpg = image/jpeg
     * .jpeg = image/jpeg
     * .png = image/png .png = application/x-png
     * .txt = text/plain :客户端浏览器按 纯文本 格式进行解析文档
     * ZIP = application/x-zip-compressed
     * RAR = application/octet-stream
     *
     * @param uniId
     * @param httpServletResponse
     */
    public void downloadMaterial(String uniId, String suffix, HttpServletResponse httpServletResponse) throws IOException {
        ModuleExample moduleExample = new ModuleExample();
        ModuleExample.Criteria criteria = moduleExample.createCriteria();
        criteria.andUniIdEqualTo(uniId);
        List<Module> moduleList = moduleMapper.selectByExampleWithBLOBs(moduleExample);
        Module module = moduleList.get(0);

        //内容编码
        httpServletResponse.setCharacterEncoding("utf-8");
        //导出文件名放入url
        String fileName = "";
        InputStream inputStream = null;
        OutputStream outputStream = httpServletResponse.getOutputStream();

        URL url = new URL("http://");
        LOG.info("请求url：{}", url);
        //String suffix=urlParam.substring(urlParam.lastIndexOf(".")+1).toLowerCase();
        if (suffix.equals("ppt") || suffix.equals("pptx")) {
            try {
                fileName = java.net.URLEncoder.encode(module.getPptTitle(), "utf-8");
            } catch (UnsupportedEncodingException e) {
                LOG.error("URL编码解析错误");
                e.printStackTrace();
            }
            url = new URL(module.getPptFile());
            httpServletResponse.setContentType("application/vnd.ms-powerpoint");
            httpServletResponse.setHeader("Access-Control-Expose-Headers", "Content-disposition");
            httpServletResponse.setHeader("Content-disposition", "attachment;filename=" + fileName + ".pptx");
        } else if (suffix.equals("mp4")) {
            try {
                fileName = java.net.URLEncoder.encode(module.getVideoTitle(), "utf-8");
            } catch (UnsupportedEncodingException e) {
                LOG.error("URL编码解析错误");
                e.printStackTrace();
            }
            url = new URL(module.getVideo());
            //下载类型
            httpServletResponse.setContentType("video/mpeg4");
            //响应头
            httpServletResponse.setHeader("Access-Control-Expose-Headers", "Content-disposition");
            httpServletResponse.setHeader("Content-disposition", "attachment;filename=" + fileName + ".mp4");
        } else if (suffix.equals("zip")) {
            try {
                fileName = java.net.URLEncoder.encode(module.getDesignTitle(), "utf-8");
            } catch (UnsupportedEncodingException e) {
                LOG.error("URL编码解析错误");
                e.printStackTrace();
            }
            url = new URL(module.getDesignFile());
            httpServletResponse.setContentType("application/x-zip-compressed");
            httpServletResponse.setHeader("Access-Control-Expose-Headers", "Content-disposition");
            httpServletResponse.setHeader("Content-disposition", "attachment;filename=" + fileName + ".zip");
        }

        int byteSum = 0;
        int byteRead = 0;
        try {
            //开启输入流
            //fileInputStream=new FileInputStream(file);
            URLConnection urlConnection = url.openConnection();
            inputStream = urlConnection.getInputStream();
            LOG.info("输入流inputStream：{}", inputStream);

            byte[] bytes = new byte[1024];
            while ((byteRead = inputStream.read(bytes)) != -1) {
                byteSum += byteRead;
                outputStream.write(bytes, 0, byteRead);
            }
        } catch (IOException e) {
            LOG.error("输出流异常");
            e.printStackTrace();
        } finally {
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 公司模块
     */
    //1.获取公司介绍页主图
    public List<ModuleDto> getCompanyMainPic(){
        ModuleExample moduleExample=new ModuleExample();
        ModuleExample.Criteria criteria=moduleExample.createCriteria();
        criteria.andIsShowEqualTo(YesOrNoEnum.YES.getCode());
        criteria.andTypeIdEqualTo(ModuleTypeEnum.COMPANY_MODULE.getCode());
        criteria.andParentIdEqualTo("0");
        List<Module> moduleList=moduleMapper.selectByExampleWithBLOBs(moduleExample);
        List<ModuleDto> moduleDtoList=new ArrayList<>();
        moduleList.stream().forEach(module -> {
            List<String> seoKeyword = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getSeoKeyword())) {
                seoKeyword = Arrays.asList(module.getSeoKeyword().split(";"));
            }
            List<String> pic = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getPicList())) {
                pic = Arrays.asList(module.getPicList().split(";"));
            }

            //这里如果报not pointer异常，需要清空数据库，默认default null，数据不对称
            List<String> mini = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getMiniPicList())) {
                mini = Arrays.asList(module.getMiniPicList().split(";"));
            }
            List<String> icon = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getIconList())) {
                icon = Arrays.asList(module.getIconList().split(";"));
            }

            List<ModuleCoreDescDto> coreDescDtoList = new ArrayList<>();
            List<String> cores = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getCoreDesc())) {
                StringBuilder sb = new StringBuilder();
                cores = Arrays.asList(module.getCoreDesc().split(";"));
                for (String coreDesc : cores) {
                    //字符串转jsonObj
                    JSONObject jsonObject = JSON.parseObject(coreDesc);
                    ModuleCoreDescDto coreDescDto = JSONObject.toJavaObject(jsonObject, ModuleCoreDescDto.class);
                    coreDescDtoList.add(coreDescDto);
                }

            }

            ModuleDto moduleDto = DuplicateUtil.copy(module, ModuleDto.class);
            moduleDto.setSeoKeyword(seoKeyword);
            moduleDto.setPicList(pic);
            moduleDto.setMiniPicList(mini);
            moduleDto.setIconList(icon);
            moduleDto.setCoreDescDtos(coreDescDtoList);
            moduleDtoList.add(moduleDto);
        });

        return moduleDtoList;
    }
    //2.获取公司介绍公司列表
    public List<ModuleDto> getCompanyList(){
        ModuleExample moduleExample=new ModuleExample();
        ModuleExample.Criteria criteria=moduleExample.createCriteria();
        criteria.andIsShowEqualTo(YesOrNoEnum.YES.getCode());
        criteria.andTypeIdEqualTo(ModuleTypeEnum.COMPANY_MODULE.getCode());
        criteria.andComTypeEqualTo(ModuleComTypeEnum.COM_INTRO.getCode());
        moduleExample.setOrderByClause("sort desc");
        List<Module> moduleList=moduleMapper.selectByExampleWithBLOBs(moduleExample);
        List<ModuleDto> moduleDtoList=new ArrayList<>();
        moduleList.stream().forEach(module -> {
            List<String> seoKeyword = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getSeoKeyword())) {
                seoKeyword = Arrays.asList(module.getSeoKeyword().split(";"));
            }
            List<String> pic = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getPicList())) {
                pic = Arrays.asList(module.getPicList().split(";"));
            }

            //这里如果报not pointer异常，需要清空数据库，默认default null，数据不对称
            List<String> mini = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getMiniPicList())) {
                mini = Arrays.asList(module.getMiniPicList().split(";"));
            }
            List<String> icon = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getIconList())) {
                icon = Arrays.asList(module.getIconList().split(";"));
            }

            List<ModuleCoreDescDto> coreDescDtoList = new ArrayList<>();
            List<String> cores = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getCoreDesc())) {
                StringBuilder sb = new StringBuilder();
                cores = Arrays.asList(module.getCoreDesc().split(";"));
                for (String coreDesc : cores) {
                    //字符串转jsonObj
                    JSONObject jsonObject = JSON.parseObject(coreDesc);
                    ModuleCoreDescDto coreDescDto = JSONObject.toJavaObject(jsonObject, ModuleCoreDescDto.class);
                    coreDescDtoList.add(coreDescDto);
                }

            }

            ModuleDto moduleDto = DuplicateUtil.copy(module, ModuleDto.class);
            moduleDto.setSeoKeyword(seoKeyword);
            moduleDto.setPicList(pic);
            moduleDto.setMiniPicList(mini);
            moduleDto.setIconList(icon);
            moduleDto.setCoreDescDtos(coreDescDtoList);
            moduleDtoList.add(moduleDto);
        });

        return moduleDtoList;
    }
    //3.获取董事介绍列表
    public List<ModuleDto> getCompanyChiefList(){
        ModuleExample moduleExample=new ModuleExample();
        ModuleExample.Criteria criteria=moduleExample.createCriteria();
        criteria.andIsShowEqualTo(YesOrNoEnum.YES.getCode());
        criteria.andTypeIdEqualTo(ModuleTypeEnum.COMPANY_MODULE.getCode());

        List<String> comType=new ArrayList<>();
        comType.add(ModuleComTypeEnum.CHIEF_EXECUTIVE.getCode());
        comType.add(ModuleComTypeEnum.STOCK_HOLDER.getCode());
        comType.add(ModuleComTypeEnum.MANAGEMENT_LAYER.getCode());
        criteria.andComTypeIn(comType);
        moduleExample.setOrderByClause("sort desc");
        List<Module> moduleList=moduleMapper.selectByExampleWithBLOBs(moduleExample);
        List<ModuleDto> moduleDtoList=new ArrayList<>();
        moduleList.stream().forEach(module -> {
            List<String> seoKeyword = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getSeoKeyword())) {
                seoKeyword = Arrays.asList(module.getSeoKeyword().split(";"));
            }
            List<String> pic = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getPicList())) {
                pic = Arrays.asList(module.getPicList().split(";"));
            }

            //这里如果报not pointer异常，需要清空数据库，默认default null，数据不对称
            List<String> mini = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getMiniPicList())) {
                mini = Arrays.asList(module.getMiniPicList().split(";"));
            }
            List<String> icon = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getIconList())) {
                icon = Arrays.asList(module.getIconList().split(";"));
            }

            List<ModuleCoreDescDto> coreDescDtoList = new ArrayList<>();
            List<String> cores = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getCoreDesc())) {
                StringBuilder sb = new StringBuilder();
                cores = Arrays.asList(module.getCoreDesc().split(";"));
                for (String coreDesc : cores) {
                    //字符串转jsonObj
                    JSONObject jsonObject = JSON.parseObject(coreDesc);
                    ModuleCoreDescDto coreDescDto = JSONObject.toJavaObject(jsonObject, ModuleCoreDescDto.class);
                    coreDescDtoList.add(coreDescDto);
                }

            }

            ModuleDto moduleDto = DuplicateUtil.copy(module, ModuleDto.class);
            moduleDto.setSeoKeyword(seoKeyword);
            moduleDto.setPicList(pic);
            moduleDto.setMiniPicList(mini);
            moduleDto.setIconList(icon);
            moduleDto.setCoreDescDtos(coreDescDtoList);
            moduleDtoList.add(moduleDto);
        });

        return moduleDtoList;
    }
    //4.获取组织构架列表
    public List<ModuleDto> getCompanyGroupList(){
        ModuleExample moduleExample=new ModuleExample();
        ModuleExample.Criteria criteria=moduleExample.createCriteria();
        criteria.andIsShowEqualTo(YesOrNoEnum.YES.getCode());
        criteria.andTypeIdEqualTo(ModuleTypeEnum.COMPANY_MODULE.getCode());
        criteria.andComTypeEqualTo(ModuleComTypeEnum.COM_GROUP.getCode());
        moduleExample.setOrderByClause("sort desc");
        List<Module> moduleList=moduleMapper.selectByExampleWithBLOBs(moduleExample);
        List<ModuleDto> moduleDtoList=new ArrayList<>();
        moduleList.stream().forEach(module -> {
            List<String> seoKeyword = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getSeoKeyword())) {
                seoKeyword = Arrays.asList(module.getSeoKeyword().split(";"));
            }
            List<String> pic = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getPicList())) {
                pic = Arrays.asList(module.getPicList().split(";"));
            }

            //这里如果报not pointer异常，需要清空数据库，默认default null，数据不对称
            List<String> mini = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getMiniPicList())) {
                mini = Arrays.asList(module.getMiniPicList().split(";"));
            }
            List<String> icon = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getIconList())) {
                icon = Arrays.asList(module.getIconList().split(";"));
            }

            List<ModuleCoreDescDto> coreDescDtoList = new ArrayList<>();
            List<String> cores = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getCoreDesc())) {
                StringBuilder sb = new StringBuilder();
                cores = Arrays.asList(module.getCoreDesc().split(";"));
                for (String coreDesc : cores) {
                    //字符串转jsonObj
                    JSONObject jsonObject = JSON.parseObject(coreDesc);
                    ModuleCoreDescDto coreDescDto = JSONObject.toJavaObject(jsonObject, ModuleCoreDescDto.class);
                    coreDescDtoList.add(coreDescDto);
                }

            }

            ModuleDto moduleDto = DuplicateUtil.copy(module, ModuleDto.class);
            moduleDto.setSeoKeyword(seoKeyword);
            moduleDto.setPicList(pic);
            moduleDto.setMiniPicList(mini);
            moduleDto.setIconList(icon);
            moduleDto.setCoreDescDtos(coreDescDtoList);
            moduleDtoList.add(moduleDto);
        });

        return moduleDtoList;
    }
    //5.获取发展历程列表
    public List<ModuleDto> getCompanyDevhonorList(){
        ModuleExample moduleExample=new ModuleExample();
        ModuleExample.Criteria criteria=moduleExample.createCriteria();
        criteria.andIsShowEqualTo(YesOrNoEnum.YES.getCode());
        criteria.andTypeIdEqualTo(ModuleTypeEnum.COMPANY_MODULE.getCode());
        criteria.andComTypeEqualTo(ModuleComTypeEnum.DEVELOPMENT_HISTORY.getCode());
        moduleExample.setOrderByClause("sort desc");
        List<ModuleDto> moduleDtoList=new ArrayList<>();
        List<Module> moduleList=moduleMapper.selectByExampleWithBLOBs(moduleExample);
        moduleList.stream().forEach(module -> {
            List<String> seoKeyword = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getSeoKeyword())) {
                seoKeyword = Arrays.asList(module.getSeoKeyword().split(";"));
            }
            List<String> pic = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getPicList())) {
                pic = Arrays.asList(module.getPicList().split(";"));
            }

            //这里如果报not pointer异常，需要清空数据库，默认default null，数据不对称
            List<String> mini = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getMiniPicList())) {
                mini = Arrays.asList(module.getMiniPicList().split(";"));
            }
            List<String> icon = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getIconList())) {
                icon = Arrays.asList(module.getIconList().split(";"));
            }

            List<ModuleCoreDescDto> coreDescDtoList = new ArrayList<>();
            List<String> cores = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getCoreDesc())) {
                StringBuilder sb = new StringBuilder();
                cores = Arrays.asList(module.getCoreDesc().split(";"));
                for (String coreDesc : cores) {
                    //字符串转jsonObj
                    JSONObject jsonObject = JSON.parseObject(coreDesc);
                    ModuleCoreDescDto coreDescDto = JSONObject.toJavaObject(jsonObject, ModuleCoreDescDto.class);
                    coreDescDtoList.add(coreDescDto);
                }

            }

            ModuleDto moduleDto = DuplicateUtil.copy(module, ModuleDto.class);
            moduleDto.setSeoKeyword(seoKeyword);
            moduleDto.setPicList(pic);
            moduleDto.setMiniPicList(mini);
            moduleDto.setIconList(icon);
            moduleDto.setCoreDescDtos(coreDescDtoList);
            moduleDtoList.add(moduleDto);
        });

        return moduleDtoList;
    }
    //荣誉资质
    public List<ModuleDto> getCompanyHonorList(){
        ModuleExample moduleExample=new ModuleExample();
        ModuleExample.Criteria criteria=moduleExample.createCriteria();
        criteria.andIsShowEqualTo(YesOrNoEnum.YES.getCode());
        criteria.andTypeIdEqualTo(ModuleTypeEnum.COMPANY_MODULE.getCode());
        criteria.andComTypeEqualTo(ModuleComTypeEnum.HONOR_QUALIFICATION.getCode());
        moduleExample.setOrderByClause("sort desc");
        List<ModuleDto> moduleDtoList=new ArrayList<>();
        List<Module> moduleList=moduleMapper.selectByExampleWithBLOBs(moduleExample);
        moduleList.stream().forEach(module -> {
            List<String> seoKeyword = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getSeoKeyword())) {
                seoKeyword = Arrays.asList(module.getSeoKeyword().split(";"));
            }
            List<String> pic = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getPicList())) {
                pic = Arrays.asList(module.getPicList().split(";"));
            }

            //这里如果报not pointer异常，需要清空数据库，默认default null，数据不对称
            List<String> mini = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getMiniPicList())) {
                mini = Arrays.asList(module.getMiniPicList().split(";"));
            }
            List<String> icon = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getIconList())) {
                icon = Arrays.asList(module.getIconList().split(";"));
            }

            List<ModuleCoreDescDto> coreDescDtoList = new ArrayList<>();
            List<String> cores = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getCoreDesc())) {
                StringBuilder sb = new StringBuilder();
                cores = Arrays.asList(module.getCoreDesc().split(";"));
                for (String coreDesc : cores) {
                    //字符串转jsonObj
                    JSONObject jsonObject = JSON.parseObject(coreDesc);
                    ModuleCoreDescDto coreDescDto = JSONObject.toJavaObject(jsonObject, ModuleCoreDescDto.class);
                    coreDescDtoList.add(coreDescDto);
                }

            }

            ModuleDto moduleDto = DuplicateUtil.copy(module, ModuleDto.class);
            moduleDto.setSeoKeyword(seoKeyword);
            moduleDto.setPicList(pic);
            moduleDto.setMiniPicList(mini);
            moduleDto.setIconList(icon);
            moduleDto.setCoreDescDtos(coreDescDtoList);
            moduleDtoList.add(moduleDto);
        });

        return moduleDtoList;
    }
    //6.轮循图接口
    public List<ModuleDto> getCompanyRecommentList(){
        ModuleExample moduleExample=new ModuleExample();
        ModuleExample.Criteria criteria=moduleExample.createCriteria();
        criteria.andIsShowEqualTo(YesOrNoEnum.YES.getCode());
        criteria.andTypeIdEqualTo(ModuleTypeEnum.COMPANY_MODULE.getCode());
        criteria.andContentRecommendEqualTo(ModuleComContentRecommendEnum.RECOMMEND.getCode());
        moduleExample.setOrderByClause("sort desc");
        List<Module> moduleList=moduleMapper.selectByExampleWithBLOBs(moduleExample);
        List<ModuleDto> moduleDtoList=new ArrayList<>();
        moduleList.stream().forEach(module -> {
            List<String> seoKeyword = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getSeoKeyword())) {
                seoKeyword = Arrays.asList(module.getSeoKeyword().split(";"));
            }
            List<String> pic = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getPicList())) {
                pic = Arrays.asList(module.getPicList().split(";"));
            }

            //这里如果报not pointer异常，需要清空数据库，默认default null，数据不对称
            List<String> mini = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getMiniPicList())) {
                mini = Arrays.asList(module.getMiniPicList().split(";"));
            }
            List<String> icon = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getIconList())) {
                icon = Arrays.asList(module.getIconList().split(";"));
            }

            List<ModuleCoreDescDto> coreDescDtoList = new ArrayList<>();
            List<String> cores = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getCoreDesc())) {
                StringBuilder sb = new StringBuilder();
                cores = Arrays.asList(module.getCoreDesc().split(";"));
                for (String coreDesc : cores) {
                    //字符串转jsonObj
                    JSONObject jsonObject = JSON.parseObject(coreDesc);
                    ModuleCoreDescDto coreDescDto = JSONObject.toJavaObject(jsonObject, ModuleCoreDescDto.class);
                    coreDescDtoList.add(coreDescDto);
                }

            }

            ModuleDto moduleDto = DuplicateUtil.copy(module, ModuleDto.class);
            moduleDto.setSeoKeyword(seoKeyword);
            moduleDto.setPicList(pic);
            moduleDto.setMiniPicList(mini);
            moduleDto.setIconList(icon);
            moduleDto.setCoreDescDtos(coreDescDtoList);
            moduleDtoList.add(moduleDto);
        });

        return moduleDtoList;
    }

    //获取联系我们banner图
    public List<ModuleDto> getGuestBookBanner(){
        ModuleExample moduleExample=new ModuleExample();
        ModuleExample.Criteria criteria=moduleExample.createCriteria();
        criteria.andIsShowEqualTo(YesOrNoEnum.YES.getCode());
        criteria.andTypeIdEqualTo(ModuleTypeEnum.GUESTBOOK_MODULE.getCode());
        List<Module> moduleList=moduleMapper.selectByExampleWithBLOBs(moduleExample);
        List<ModuleDto> moduleDtoList=new ArrayList<>();
        moduleList.stream().forEach(module -> {
            List<String> seoKeyword = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getSeoKeyword())) {
                seoKeyword = Arrays.asList(module.getSeoKeyword().split(";"));
            }
            List<String> pic = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getPicList())) {
                pic = Arrays.asList(module.getPicList().split(";"));
            }

            //这里如果报not pointer异常，需要清空数据库，默认default null，数据不对称
            List<String> mini = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getMiniPicList())) {
                mini = Arrays.asList(module.getMiniPicList().split(";"));
            }
            List<String> icon = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getIconList())) {
                icon = Arrays.asList(module.getIconList().split(";"));
            }

            List<ModuleCoreDescDto> coreDescDtoList = new ArrayList<>();
            List<String> cores = new ArrayList<>();
            if (!StringUtils.isEmpty(module.getCoreDesc())) {
                StringBuilder sb = new StringBuilder();
                cores = Arrays.asList(module.getCoreDesc().split(";"));
                for (String coreDesc : cores) {
                    //字符串转jsonObj
                    JSONObject jsonObject = JSON.parseObject(coreDesc);
                    ModuleCoreDescDto coreDescDto = JSONObject.toJavaObject(jsonObject, ModuleCoreDescDto.class);
                    coreDescDtoList.add(coreDescDto);
                }

            }

            ModuleDto moduleDto = DuplicateUtil.copy(module, ModuleDto.class);
            moduleDto.setSeoKeyword(seoKeyword);
            moduleDto.setPicList(pic);
            moduleDto.setMiniPicList(mini);
            moduleDto.setIconList(icon);
            moduleDto.setCoreDescDtos(coreDescDtoList);
            moduleDtoList.add(moduleDto);
        });

        return moduleDtoList;
    }
}
